home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / ctlmod / init_qt.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-01-23  |  1.9 KB  |  75 lines

  1. # include    "ctlmod.h"
  2. # include    <ingres.h>
  3. # include    <aux.h>
  4. # include    <tree.h>
  5. # include    <sccs.h>
  6.  
  7. SCCSID(@(#)init_qt.c    8.1    12/31/84)
  8.  
  9. /*
  10. **  INIT_QT -- initialize query tree
  11. **
  12. **    This routine saves and initializes the global portion
  13. **    of a query tree.  It must be called before doing any
  14. **    creation of a query tree which depends on or modifies
  15. **    the global portion of a query tree.
  16. **
  17. **    The global portion of a query tree includes the range
  18. **    table, the query mode, etc.
  19. **
  20. **    The algorithm for saving the query tree global portion
  21. **    ("Qt") is somewhat obscure.  To understand it, it is
  22. **    critical to be clear that every query tree is associated
  23. **    with a context, but not every context is associated with
  24. **    a query tree.  We further constrain that a context
  25. **    is associated with at most one query tree; if more than
  26. **    one is needed in a single context, it is always safe
  27. **    to reuse the previous one.
  28. **
  29. **    When we allocate a new context (in 'initp'), the current
  30. **    Qt (if in use) is associated with the save image of the
  31. **    context.  When we call init_qt, we check to see if such
  32. **    an association exists.  If so, we save Qt, and adjust
  33. **    the old context to point to the save image of Qt.  When
  34. **    we call init_qt again, Qt will be active, but not
  35. **    associated with a context save image; thus, we do not
  36. **    save Qt.  On context restore, if it has a pointer to a
  37. **    saved Qt, we restore that also.
  38. **
  39. **    Parameters:
  40. **        none.
  41. **    
  42. **    Returns:
  43. **        none
  44. **    
  45. **    Side Effects:
  46. **        Qt possibly gets saved in an area set up by
  47. **            calling malloc.
  48. **    
  49. **    Trace Flags:
  50. **        none
  51. */
  52.  
  53. init_qt()
  54. {
  55.     extern char    *malloc();
  56.     register char    *p;
  57.  
  58.     /*
  59.     **  Save Qt if associated with a saved context.
  60.     */
  61.  
  62.     if (Qt.qt_ctx != NULL)
  63.     {
  64.         p = malloc(sizeof Qt);
  65.         if (p == NULL)
  66.             syserr("init_qt: no mem");
  67.         bmove((char *)&Qt, p, sizeof Qt);
  68.         ((ctx_t *)Qt.qt_ctx)->ctx_qt = p;
  69.         Qt.qt_ctx = NULL;
  70.     }
  71.  
  72.     /* mark the Qt as active */
  73.     Qt.qt_active++;
  74. }
  75.